testl $~0,(r(dx),r(ax),1)
jnz .Lsvm_process_softirqs
+ mov VCPU_nhvm_p2m(r(bx)),r(ax)
+ test r(ax),r(ax)
+ sete %al
+ andb VCPU_nhvm_guestmode(r(bx)),%al
+ jnz .Lsvm_nsvm_no_p2m
+
call svm_asid_handle_vmrun
cmpb $0,addr_of(tb_init_done)
.Lsvm_trace:
call svm_trace_vmentry
jmp .Lsvm_trace_done
+
+.Lsvm_nsvm_no_p2m:
+ /* Someone shot down our nested p2m table; go round again
+ * and nsvm_vcpu_switch() will fix it for us. */
+ STGI
+ jmp svm_asm_do_resume
OFFSET(VCPU_hvm_guest_cr2, struct vcpu, arch.hvm_vcpu.guest_cr[2]);
BLANK();
+ OFFSET(VCPU_nhvm_guestmode, struct vcpu, arch.hvm_vcpu.nvcpu.nv_guestmode);
+ OFFSET(VCPU_nhvm_p2m, struct vcpu, arch.hvm_vcpu.nvcpu.nv_p2m);
+ BLANK();
+
OFFSET(VMCB_rax, struct vmcb_struct, rax);
OFFSET(VMCB_rip, struct vmcb_struct, rip);
OFFSET(VMCB_rsp, struct vmcb_struct, rsp);
OFFSET(VCPU_hvm_guest_cr2, struct vcpu, arch.hvm_vcpu.guest_cr[2]);
BLANK();
+ OFFSET(VCPU_nhvm_guestmode, struct vcpu, arch.hvm_vcpu.nvcpu.nv_guestmode);
+ OFFSET(VCPU_nhvm_p2m, struct vcpu, arch.hvm_vcpu.nvcpu.nv_p2m);
+ BLANK();
+
OFFSET(DOMAIN_is_32bit_pv, struct domain, arch.is_32bit_pv);
BLANK();